package com.nengchuan.kbms.common;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nengchuan.model.dto.PageDTO;
import com.nengchuan.model.model.NcPageInfo;

import java.io.Serializable;
import java.util.List;

/**
 * 自定义通用 IPageService 用于替代 IService
 * @param <T>
 */
public interface IPageService<T> extends IService<T> {

    /**
     * 方便 DTO 直接调用 （同 save 方法（如果DTO属性中存在id属性会忽略），返回实际的PO对象
     * @param object
     * @return
     */
    T insert(Object object);

    /**
     * 方便 DTO 直接调用 （同 updateById方法，对象中必须存在id属性
     * @param object
     * @return
     */
    boolean update(Object object);

    <D> D getById(Long id, Class<D> clz);

    /**
     * 支持单个和多个主键删除（多个以,分隔
     * @param id
     * @return
     */
    boolean remove(Serializable id);

    /**
     * 查询条件对象通过继承PageDTO可实现自动添加条件对象（需 @Relation 注解
     * @param pageDTO
     * @param clz
     * @param <D>
     * @return
     */
    <D> NcPageInfo<D> page(PageDTO pageDTO, Class<D> clz);

    /**
     * 通过查询条件对象自动添加Wrapper条件（dto 需 @Relation 注解
     * @param dto
     * @param clz
     * @param <D>
     * @return
     */
    <D> List<D> list(Object dto, Class<D> clz);

    List<Long> transIdToList(Serializable id);
}
